package auxiliares;
/**
 * 
 * @author nol
 *
 */
public class Monitor {
	private int cantLectores;
	private int paraEscribir;
	private boolean escribiendo;
	
	public Monitor(){
		cantLectores = paraEscribir = 0;
		escribiendo = false;
	}
	synchronized public void comienzoLectura() throws InterruptedException{
		while(escribiendo || paraEscribir > 0) wait(); 
		cantLectores++;
	}
	synchronized public void terminoLectura(){
		cantLectores--;
		notifyAll ();
	}
	synchronized public void comienzoEscritura() throws InterruptedException{
		paraEscribir++;
		while(cantLectores > 0 || escribiendo) wait();
		paraEscribir--;
		escribiendo = true;
	}
	synchronized public void terminoEscritura(){
		escribiendo = false;
		notifyAll ();
	}
}
